/**
 * Copyright (c) 2024 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// NOLINTNEXTLINE(misc-definitions-in-headers,readability-function-size)
inline void SetAbcKitFlags(Inst *inst)
{
    auto opcode = inst->GetOpcode();
    if (opcode == Opcode::Intrinsic) {
        inst->ClearFlag(inst_flags::REQUIRE_STATE);
        return;
    }
    switch(opcode) {
% IR::instructions.each do |inst|
%   if inst.respond_to?("abckit_flags")
% flags = inst.abckit_flags
% flags << 'pseudo_dst' if !inst.operands.empty? && inst.operands.first.has('pseudo')
% flags << 'no_dst' if inst.operands.empty? || !inst.operands.first.is_dst?
        case Opcode::<%= inst.opcode %>: {
            inst->SetFlagsMask(static_cast<inst_flags::Flags>(<%= flags.map{|x| "inst_flags::" + x.upcase }.join('|') %>));
            return;
        }
%   else
        case Opcode::<%= inst.opcode %>:
            return;
%   end
%end
        default:
            return;
    }
}
